import nprogress from './plugins/nprogress'
import router from '@/router'
import type { Token } from './types/data'
import { useUserInfoStore } from './stores/modules/user'

/**
 * 白名单，用户不登录也可以进入
 */
const whiteList = ['/login']

router.beforeEach(async (to, from, next) => {
  // 显示进度条
  nprogress.start()
  // 获取用户信息
  const userInfo = useUserInfoStore()
  /**
   *  判断用户是否登录
   *  1.未登录，只允许进入 login 页面，完成登录
   *  2.已登录  不允许进入 login 页面
   */
  // 从缓存中获取用户 token 信息
  const token: Token = userInfo.$state.token
  // 判断如果没有登录，强制跳转到登录页
  if (token?.accessToken) {
    // token 存在，并且请求登录页面，不允许，跳转到原来的页面，原来不存在就跳转到首页
    if (to.path === '/login') {
      next({ path: from.path ? from.path : '/' })
    } else {
      if (JSON.stringify(userInfo.user) == '{}') {
        // 跳转时，用户信息为空，则取请求用户信息
        await userInfo.getUserInfo()
      }
      next()
    }
  } else {
    // token 不存在，白名单内的地址可以进入，否则直接跳转到登录页面
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      next({ path: '/login' })
    }
  }
})

router.afterEach(() => {
  // 关闭进度条
  nprogress.done()
})
